package cn.kone.config;

import cn.kone.pojo.domain.Login;
import cn.kone.service.ILoginService;
import cn.kone.utils.NameUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.security.crypto.bcrypt.BCrypt;
import org.springframework.stereotype.Component;

import java.util.Date;


@Component
public class MyApplicationListener implements ApplicationListener<ContextRefreshedEvent> {
    @Autowired
    private ILoginService loginService;

    //从配置中取出头像封装给headPortrait
    @Value("${head-portrait}")
    private String headPortrait;

    /**
     * 当应用程序上下文被刷新时触发的事件监听器方法。
     * 在应用程序上下文初始化或刷新时，该方法将被调用。
     *
     * @param event 应用程序上下文刷新事件对象
     */
    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        // 查询ID为0的用户是否存在
        Login loginServiceOne = loginService.getOne(new LambdaQueryWrapper<Login>().eq(Login::getId, 0));
        // 如果不存在ID为0的用户，则创建一个默认管理员用户
        if (loginServiceOne == null) {
            // 创建一个新的用户实体
            Login login = new Login();
            // 设置用户ID为0
            login.setId(0L);
            // 设置用户名为"admin"
            login.setUsername("admin");
            // 设置密码为经过BCrypt加密的"123456"
            login.setPassword(BCrypt.hashpw("123456", BCrypt.gensalt()));
            // 设置用户类型为0
            login.setType(0);
            // 设置用户为启用状态
            login.setEnabled(true);
            // 设置用户头像为配置中心的头像地址
            login.setAvatar(headPortrait);
            // 设置用户为管理员
            login.setAdmin(true);
            // 生成并设置用户的昵称
            login.setNickName(NameUtil.getName());
            // 设置用户的创建时间为当前时间
            login.setCreateTime(new Date());
            // 保存创建的用户实体到数据库
            loginService.save(login);
        }
    }

}
